BOOT_START_ADDR         equ     0x7c00
LOADER_START_ADDR		equ 	0x900
KERNEL_START_ADDR		equ 	0xB000

; 页目录表与页起始地址
PAGE_DIR_BASE           equ     0x100000
PAGE_TAB_BASE           equ     0x101000

; 页表相关属性
PG_P             equ    1b      ; 页存在属性位
PG_RW_R          equ    00b     ; R/W 属性位值, 读/执行
PG_RW_W          equ    10b     ; R/W 属性位值, 读/写/执行
PG_US_S          equ    000b    ; U/S 属性位值, 系统级
PG_US_U          equ    100b    ; U/S 属性位值, 用户级

; 共享内存中的数据地址
SHARE_START_ADDR        equ     0xA000
GDT_ENTRY_ADDR          equ     SHARE_START_ADDR + 0
GDT_SIZE_ADDR           equ     SHARE_START_ADDR + 4
LDT_ENTRY_ADDR          equ     SHARE_START_ADDR + 8
LDT_SIZE_ADDR           equ     SHARE_START_ADDR + 12
IDT_ENTRY_ADDR          equ     SHARE_START_ADDR + 16
IDT_SIZE_ADDR           equ     SHARE_START_ADDR + 20
TSS_ENTRY_ADDR          equ     SHARE_START_ADDR + 24
TSS_SIZE_ADDR           equ     SHARE_START_ADDR + 28
MEM_SIZE_ADDR           equ     SHARE_START_ADDR + 32


; 段属性的一些定义，暂时定义一些目前用得到的属性
DA_32       equ    0x4000  ; D/B = 1
DA_DR       equ    0x90    ; 数据，只读
DA_DRW      equ    0x92    ; 数据，可读/写
DA_DRWA     equ    0x93    ; 数据，可读/写，已访问
DA_C        equ    0x98    ; 代码，仅执行
DA_CR       equ    0x9A    ; 代码，可执行，可读
DA_CCO      equ    0x9C    ; 代码，一致性段，仅执行
DA_CCOR     equ    0x9E    ; 代码，一致性段，可执行，可读，已访问
DA_LIMIT_4K equ    0x8000  ; G = 1, 颗粒度：4K
DA_LDT      equ    0x82    ; TYPE : LDT

; 门属性的一些定义
DA_CALL_GATE  equ     0x8C    ; 32 位调用门
DA_TSS        equ	  0x89	  ; 32 位 TSS (可用)

; 段选择符属性定义
SA_RPL0     equ    0     ; RPL = 0
SA_RPL1     equ    1     ; RPL = 1
SA_RPL2     equ    2     ; RPL = 2
SA_RPL3     equ    3     ; RPL = 3
SA_TIG      equ    0     ; TI = 0, GDT
SA_TIL      equ    4     ; TI = 1, LDT

; 特权级
DA_DPL0     equ    0x00  ; DPL = 0
DA_DPL1     equ    0x20  ; DPL = 1
DA_DPL2     equ    0x40  ; DPL = 2
DA_DPL3     equ    0x60  ; DPL = 3

; 段描述符定义
%macro Descriptor 3         ; 有三个参数：段基址、段界限、段属性
    dw  %2 & 0xFFFF         ; 段界限 1  (2 字节)
    dw  %1 & 0xFFFF         ; 段基址 1  (2 字节)
    db  (%1 >> 16) & 0xFF   ; 段基址 2  (1 字节)
    dw  ((%2 >> 8) & 0xF00) | (%3 & 0xF0FF) ; 段属性 1 + 段界限 2 + 段属性 2 (2 字节)
    db  (%1 >> 24) & 0xFF   ; 段基址 3 (1 字节)
%endmacro                   ; 共 8 个字节

; 门描述符定义
%macro Gate 4            ; 有四个参数：选择子、偏移地址、参数个数、属性
    dw    (%2 & 0xFFFF)                      ; 偏移地址1
    dw    %1                                 ; 选择子
    dw    (%3 & 0x1F) | ((%4 << 8) & 0xFF00) ; 属性
    dw    ((%2 >> 16) & 0xFFFF)              ; 偏移地址2
%endmacro

; 门属性的一些定义
DA_CALL_GATE  equ     0x8C    ; 调用门
DA_INTR_GATE  equ     0x8E    ; 中断门
DA_TRAP_GATE  equ     0x8F    ; 陷阱门
